/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package BancoDados;

import Utilidades.UtilityDB;
import Utilidades.UtilityHTML;
import java.sql.ResultSet;
import javax.servlet.http.HttpServletRequest;

/**
 * Created on : May 21, 2011, 4:25:38 PM
 * @author diogo
 */
public class Area extends Dado implements Entidade {

	private int codArea;
	private String descricao;
	
	// <editor-fold defaultstate="collapsed" desc="Gets">
	public int getCodArea() {
		return codArea;
	}

	public String getDescricao() {
		return descricao;
	}

	public Area(int codArea, String descricao) {
		this.descricao = descricao;
		this.codArea = codArea;
	}

	public Area() {
	}
	// </editor-fold>

	@Override
	public String getTableName() {
		return "Area";
	}

	@Override
	public String[] getPrimaryKey() {
		return new String[]{"codarea"};
	}

	@Override
	public String[] getColumns() {
		return new String[]{
					"descricao"
				};
	}

	public static boolean Inserir(
			String Descricao) {


		Area a = new Area();
		String[] colunas = a.getColumns();
		int x = 0;

		String SQL = UtilityDB.CreateInsert(a.getTableName(),
				colunas[x++], Descricao);

		int linhasAfetadas = c.cadastrar(SQL);
		return linhasAfetadas > 0;
	}

	public static boolean Inserir(HttpServletRequest request) {
		String[] colunas = new Area().getColumns();
		int x = 0;

		String Descricao = request.getParameter(colunas[x++]);


		return Inserir(Descricao);
	}

	public static Area[] Listar(String filtroNome) {
		Area[] output = null;
		Area temp = new Area();
		String SQL = "";

		// montar SQL
		if (filtroNome != null) {
			//SQL = UtilityDB.CreateSelect(temp.getTableName(), temp.getColumns()[0], filtroNome);
			SQL = UtilityDB.CallFunction("fn_filtrar_area", filtroNome);
		} else {
			SQL = UtilityDB.CreateSelect(temp.getTableName());
			
		}
		SQL += " ORDER BY (codarea)";
		//*/
		try {
			ResultSet rs = c.consultar(SQL, -1, true);
			int size = UtilityDB.GetRowAmount(rs);
			output = new Area[size];
			int x=0;
			String[] columns = {
				temp.getPrimaryKey()[0],
				temp.getColumns()[0]
			};


			while (rs.next()) {
				output[x++] = new Area(rs.getInt(columns[0]), rs.getString(columns[1]));
				System.out.println(String.format("desc: %s, id: %s;", output[x-1].descricao, output[x-1].codArea));

			}

		} catch (Exception e) {
		}

		return output;
	}
	
	public static boolean Alterar(int CodArea, String nome){
		String SQL = UtilityDB.CallFunction("fn_atualiza_area", CodArea, nome);
		boolean resultado = false;

		try {
			//*
			ResultSet rs = c.consultar(SQL);
			rs.next();
			resultado = rs.getBoolean(1);
			//*/
			/*
			int linhas = c.atualizar(SQL);
			resultado = linhas > 0;
			//*/
		} catch (Exception e) {
			resultado = false;
		}
		
		return resultado;
	}

	public static boolean Deletar(int CodArea){
		String SQL = UtilityDB.CallFunction("fn_deletar_area", CodArea);
		boolean resultado = false;

		try {
			//*
			ResultSet rs = c.consultar(SQL);
			rs.next();
			resultado = rs.getBoolean(1);
			//resultado = rs.next(); // gamb. por algum motivo sempre retorna FALSE aki...
		} catch (Exception e) {
			resultado = false;
		}

		return resultado;
	}

	public static String GerarCombo(String nome) {
		// UtilityHTML.NewComboBox(nome, Defs.valoresEstado, selecionado, Defs.nomeEstados, adds);
		//String SQL = "select * from area";
		StringBuilder output = new StringBuilder("");


		// fazendo vetor pra colocar no combo. lista TUDO
		Area[] areas = Area.Listar(null);

		String[] displays = new String[areas.length];
		String[] values = new String[areas.length];

		int x=0;
		for (Area a : areas) {
			values[x] = "" + (a.codArea);
			displays[x] = a.descricao;
			x++;
		}

		// gerando combo
		output.append(UtilityHTML.NewComboBox(nome, values, "", displays, ""));
		return output.toString();
	}
}
